package com.wei.czz.common.property;

import com.wei.czz.common.tool.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotNull;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wyw
 * date: 2024-06-10 10:25:35
 * className: ThreadProperty
 * version: 1.1
 * description:
 */
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "thread")
@Validated
public class ThreadProperty extends BaseEntity {

    /**
     * 线程池核心线程数
     */
    @NotNull(message = "线程池核心线程数不能为空")
    private Integer coreSize;

    /**
     * 线程池最大线程数
     */
    @NotNull(message = "线程池最大线程数不能为空")
    private Integer maxSize;

    /**
     * 线程池的任务队列容量
     */
    @NotNull(message = "线程池的任务队列容量不能为空")
    private Integer queueCapacity;

    /**
     * 线程池-线程名称前缀
     */
    @NotNull(message = "线程池-线程名称前缀不能为空")
    private String threadNamePrefix;

    /**
     * 延迟线程池-线程名称前缀
     */
    @NotNull(message = "延迟线程池-线程名称前缀不能为空")
    private String delayThreadNamePrefix;

    /**
     * 任务拒绝策略：
     *  <p>0-CallerRunsPolicy（调用线程同步执行）
     *  <p>1-AbortPolicy（拒绝任务，报异常）
     *  <p>2-DiscardPolicy（丢弃新任务，不报异常）
     *  <p>3-DiscardOldestPolicy（丢弃旧任务，放入新任务到任务队列中）
     * <p>
     * 如果配置文件没有配置，则给定一个‘0’默认值
     */
    @NotNull(message = "任务拒绝策略不能为空")
    private Integer rejectType;

}
